#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# 专利数据源解析服务
import logging
import json

logger = logging.getLogger(__name__)


class PatentSourceService:
    def __init__(self):
        pass

    standard_fields = {
        'patent': None,                # 专利
        'patent_name': None,           # 专利名称
        'province': None,              # 省份
        'year': None,                  # 年份
        'applicant_institution': None, # 专利申请人
        'application_number': None,  # 专利申请号
        'publication_date': None,    # 公开（公告）日期
        'application_date': None,    # 申请（专利）日期
        'patent_category': None,     # 专利分类
        'cp_name': None,             # 公开国别
        'sovereignty_item': None,    # 权力要求
        'subject_code': None,        # IPC
        'industry': None,            # 国民经济类别
        'abstract': None,            # 概要
        'keywords': None,            # 关键词
    }

    source_field_mapping = {
        'cyl_patent_new_2_json': {
            # 标准字段 ：数据源字段
            'patent': 'application_number',  # 专利名称
            'patent_name': 'patent_name',  # 专利名称
            'province': 'province',  # 省份
            'year': 'year',  # 年份
            'applicant_institution': 'applicant_institution',  # 专利申请人
            'application_number': 'application_number',  # 专利申请号
            'publication_date': None,  # 公开（公告）日期
            'application_date': 'application_date',  # 申请（专利）日期
            'patent_category': 'patent_category',  # 专利分类
            'cp_name': None,  # 公开国别
            'sovereignty_item': None,  # 权力要求
            'subject_code': None,  # IPC
            'industry': None,  # 国民经济类别
            'abstract': 'abstract',  # 概要
            'keywords': 'keywords',  # 关键词
        },
        'patent_index2_new_id_2_json': {
            # 标准字段 ：数据源字段
            'patent': 'filename',  # 专利名称
            'patent_name': 'title',  # 专利名称
            'province': None,  # 省份
            'year': 'year',  # 年份
            'applicant_institution': 'organization',  # 专利申请人
            'application_number': 'filename',  # 专利申请号
            'publication_date': 'publication_date',  # 公开（公告）日期
            'application_date': 'application_date',  # 申请（专利）日期
            'patent_category': 'patent_category',  # 专利分类
            'cp_name': None,  # 公开国别
            'sovereignty_item': None,  # 权力要求
            'subject_code': None,  # IPC
            'industry': None,  # 国民经济类别
            'abstract': 'abstract',  # 概要
            'keywords': 'keywords',  # 关键词
        },
    }
    def __int__(self):
        pass

    # 获取专利数据源标准字段
    def get_patent_standard_field_data(self, table_name, row_data):
        standard_fields = self.standard_fields.copy()

        # 验证数据源mapping字典
        if table_name not in self.source_field_mapping:
            logger.info(f'{table_name}未找到数据源mapping字典')
            return standard_fields

        # 从mapping 中提取字段数据，返回标准字段数据
        for standard_field, _ in self.standard_fields.items():
            if standard_field in self.source_field_mapping[table_name]:
                row_field = self.source_field_mapping[table_name][standard_field]
                if row_field is None:
                    continue
                if row_field == "keywords":
                    # 对keyword字段做特殊处理
                    standard_fields[standard_field] = json.loads(row_data[row_field])
                else:
                    standard_fields[standard_field] = row_data[row_field]
            else:
                logger.info(f'{table_name}中未找到{standard_field}字段')

        return standard_fields

